package ventanas.prueba;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import database.exceptions.EmptySlotSelectedException;
import database.exceptions.IncorrectSlotException;
import database.exceptions.LevelException;


/**
 *
 * @author Nerea
 */
public class PanelEstadisticas extends javax.swing.JPanel {

	// Variables declaration - do not modify
	private javax.swing.JButton bAceptar;
	private javax.swing.JLabel lEnemigosMatados;
	private javax.swing.JLabel lIgual1;
	private javax.swing.JLabel lIgual2;
	private javax.swing.JLabel lLetraRango;
	private javax.swing.JLabel lMonedas;
	private javax.swing.JLabel lNivelesSubidos;
	private javax.swing.JLabel lNumeroEnemigosMatados;
	private javax.swing.JLabel lNumeroMonedas;
	private javax.swing.JLabel lNumeroNivelesSubidos;
	private javax.swing.JLabel lNumeroPorEnemigos;
	private javax.swing.JLabel lNumeroPorTiempo;
	private javax.swing.JLabel lNumeroTiempo;
	private javax.swing.JLabel lNumeroTotal;
	private javax.swing.JLabel lPuntos1;
	private javax.swing.JLabel lPuntos2;
	private javax.swing.JLabel lPuntosEnemigos;
	private javax.swing.JLabel lPuntosTiempo;
	private javax.swing.JLabel lRango;
	private javax.swing.JLabel lTiempo;
	private javax.swing.JLabel lTotal;
	private javax.swing.JLabel lX1;
	private javax.swing.JLabel lX2;
	private PanelInicial panelInicial;
	private PanelSubirNivel panelSubirNivel;

	private int tiempoJuego;
	private int totalEnem;
	private int multTiempo = 3;
	private int multEnem = 2;
	private double multMonedas = 0.5;
	private int totalExperiencia;
	private int totalExpSubirNivel = 20; //Cuando el personaje suba de nivel: Hay que modificar la experiencia del personaje con  totalExpSubirNivel

	private int totalPuntosTiempo;
	private int totalPuntosEnemigos;
	private int totalPuntos;
	private int totalMonedas;
	private int numeroNivel;
	private int contNivel = 0;
	private int numFase;
	private int idPersonaje;
	private int idPartida;
	private int puntosSP;
	private char rango;

	// End of variables declaration
	/**
	 * Creates new form PanelEstadisticas
	 */
	public PanelEstadisticas(PanelInicial pI, int tiempoJ, int numEnem, int exper, int numeroFase, boolean dead, boolean endReached, int sAtaq, int sDef, int sMag, int sRes, int sVel, int sSal, int sEst, int sVid, int idPers, int idPart) { //Cargarme el atributo panelInicial y el parametro!
		
		
		panelInicial = pI;
		tiempoJuego = tiempoJ;
		totalEnem = numEnem;
		totalExperiencia = exper;
		numFase = numeroFase;
		idPersonaje = idPers;
		idPartida = idPart;


		panelSubirNivel = new PanelSubirNivel(panelInicial, this, 0, idPartida);
		lTiempo = new javax.swing.JLabel();
		lNumeroTiempo = new javax.swing.JLabel();
		lX1 = new javax.swing.JLabel();
		lNumeroPorTiempo = new javax.swing.JLabel();
		lIgual1 = new javax.swing.JLabel();
		lPuntosTiempo = new javax.swing.JLabel();
		lPuntos1 = new javax.swing.JLabel();
		lEnemigosMatados = new javax.swing.JLabel();
		lNumeroEnemigosMatados = new javax.swing.JLabel();
		lX2 = new javax.swing.JLabel();
		lNumeroPorEnemigos = new javax.swing.JLabel();
		lIgual2 = new javax.swing.JLabel();
		lPuntosEnemigos = new javax.swing.JLabel();
		lPuntos2 = new javax.swing.JLabel();
		lNivelesSubidos = new javax.swing.JLabel();
		lNumeroNivelesSubidos = new javax.swing.JLabel();
		lTotal = new javax.swing.JLabel();
		lNumeroTotal = new javax.swing.JLabel();
		lMonedas = new javax.swing.JLabel();
		lNumeroMonedas = new javax.swing.JLabel();
		lRango = new javax.swing.JLabel();
		lLetraRango = new javax.swing.JLabel();
		bAceptar = new javax.swing.JButton();

		setLayout(null);


		lTiempo.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lTiempo.setText("TIEMPO:");
		add(lTiempo);
		lTiempo.setBounds(76, 66, 221, 25);

		lNumeroTiempo.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroTiempo.setText("00:00");
		add(lNumeroTiempo);
		lNumeroTiempo.setBounds(315, 66, 81, 25);

		lX1.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lX1.setText("x");
		add(lX1);
		lX1.setBounds(402, 64, 17, 29);

		lNumeroPorTiempo.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroPorTiempo.setText("0");
		add(lNumeroPorTiempo);
		lNumeroPorTiempo.setBounds(437, 66, 19, 25);

		lIgual1.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lIgual1.setText("=");
		add(lIgual1);
		lIgual1.setBounds(487, 66, 17, 25);

		lPuntosTiempo.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lPuntosTiempo.setText("XXXX");
		add(lPuntosTiempo);
		lPuntosTiempo.setBounds(537, 64, 66, 29);

		lPuntos1.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lPuntos1.setText("PUNTOS");
		add(lPuntos1);
		lPuntos1.setBounds(632, 66, 83, 25);

		lEnemigosMatados.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lEnemigosMatados.setText("ENEMIGOS MATADOS:");
		add(lEnemigosMatados);
		lEnemigosMatados.setBounds(76, 158, 221, 22);

		lNumeroEnemigosMatados.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroEnemigosMatados.setText("00");
		add(lNumeroEnemigosMatados);
		lNumeroEnemigosMatados.setBounds(315, 158, 27, 22);

		lX2.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lX2.setText("x");
		add(lX2);
		lX2.setBounds(399, 158, 20, 22);

		lNumeroPorEnemigos.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroPorEnemigos.setText("0");
		add(lNumeroPorEnemigos);
		lNumeroPorEnemigos.setBounds(437, 155, 32, 29);

		lIgual2.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lIgual2.setText("=");
		add(lIgual2);
		lIgual2.setBounds(487, 155, 28, 29);

		lPuntosEnemigos.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lPuntosEnemigos.setText("XXXX");
		add(lPuntosEnemigos);
		lPuntosEnemigos.setBounds(537, 155, 66, 29);

		lPuntos2.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lPuntos2.setText("PUNTOS");
		add(lPuntos2);
		lPuntos2.setBounds(632, 155, 91, 29);

		lNivelesSubidos.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNivelesSubidos.setText("NIVELES SUBIDOS:");
		add(lNivelesSubidos);
		lNivelesSubidos.setBounds(76, 281, 221, 25);

		lNumeroNivelesSubidos.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroNivelesSubidos.setText("0");
		add(lNumeroNivelesSubidos);
		lNumeroNivelesSubidos.setBounds(315, 281, 27, 25);

		lTotal.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lTotal.setText("TOTAL:");
		add(lTotal);
		lTotal.setBounds(537, 355, 78, 29);

		lNumeroTotal.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroTotal.setText("XXXX");
		add(lNumeroTotal);
		lNumeroTotal.setBounds(663, 355, 52, 29);

		lMonedas.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lMonedas.setText("MONEDAS:");
		add(lMonedas);
		lMonedas.setBounds(537, 429, 104, 22);

		lNumeroMonedas.setFont(new java.awt.Font("Consolas", 1, 24)); // NOI18N
		lNumeroMonedas.setText("0");
		add(lNumeroMonedas);
		lNumeroMonedas.setBounds(663, 426, 50, 29);

		lRango.setFont(new java.awt.Font("Kristen ITC", 1, 24)); // NOI18N
		lRango.setText("RANGO");
		add(lRango);
		lRango.setBounds(101, 503, 129, 41);

		lLetraRango.setFont(new java.awt.Font("Kristen ITC", 1, 48)); // NOI18N
		lLetraRango.setText("S");
		add(lLetraRango);
		lLetraRango.setBounds(248, 461, 57, 108);

		//bAceptar.setText("ACEPTAR");
		bAceptar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("resources/ventanas/bAceptar.png")));
		bAceptar.addMouseListener(new MouseListener() {
			public void mouseClicked(MouseEvent evt) {
				subirNivel(evt);
			}

			public void mouseEntered(MouseEvent arg0) {
				bAceptar.setRolloverIcon(new ImageIcon(getClass().getClassLoader().getResource("resources/ventanas/bAAceptar.gif")));
			}

			public void mouseExited(MouseEvent arg0) {
				bAceptar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("resources/ventanas/bAceptar.png")));
			}

			public void mousePressed(MouseEvent arg0) {	   }

			public void mouseReleased(MouseEvent arg0) {	}
		});
		add(bAceptar);
		bAceptar.setBounds(537, 500, 157, 48);

		//Calculos operatorios
		totalPuntosTiempo = tiempoJuego * multTiempo;
		totalPuntosEnemigos = totalEnem * multEnem;
		totalPuntos = totalPuntosTiempo + totalPuntosEnemigos;
		totalMonedas = (int) (totalPuntos * multMonedas);

		System.out.println("Total puntos: "+totalPuntos);

		lNumeroTiempo.setText(String.valueOf(tiempoJuego));
		lNumeroEnemigosMatados.setText(String.valueOf(totalEnem));
		lNumeroPorTiempo.setText(String.valueOf(multTiempo));
		lNumeroPorEnemigos.setText(String.valueOf(multEnem));
		lPuntosTiempo.setText(String.valueOf(totalPuntosTiempo));
		lPuntosEnemigos.setText(String.valueOf(totalPuntosEnemigos));
		lNumeroTotal.setText(String.valueOf(totalPuntos));
		lNumeroMonedas.setText(String.valueOf(totalMonedas));

		try {
			panelInicial.gestor.gestionaPuntuacion(numFase,idPartida, multTiempo, totalPuntos, tiempoJuego);
		} catch (EmptySlotSelectedException | IncorrectSlotException
				| LevelException | SQLException e1) {
			e1.printStackTrace();
		}

		try {
			panelInicial.gestor.updateFondos(idPartida, totalMonedas);
		} catch (IncorrectSlotException | EmptySlotSelectedException
				| SQLException e1) {
			e1.printStackTrace();
		}


		//Control de rango
		if(totalPuntos == 0 ||totalPuntos <= 500){
			lLetraRango.setText("D");
			rango = 'D';
		}else{
			if(totalPuntos > 500 ||totalPuntos <= 1000){
				lLetraRango.setText("C");
				rango = 'C';

			}else{
				if(totalPuntos > 1500 ||totalPuntos <= 2000){
					lLetraRango.setText("B");
					rango = 'B';
				}else{
					if(totalPuntos > 2000 ||totalPuntos <= 2500){
						lLetraRango.setText("A");
						rango = 'A';
					}else{
						if(totalPuntos > 2500 ||totalPuntos <= 3000){
							lLetraRango.setText("S");
							rango = 'S';
						}
					}
				}
			}
		}
		//si se pasa el nivel y el siguinte no esta desblqueado
		//panelInicial.gestor.desbloqueaFaseNivelDefault(/*fase actual +1*/, idPartida);
		//para saber las fases desbloqueadas en nivel default
		//panelInicial.gestor.listFasesDesbloqueadas(idPartida);
		//Control subida de nivel respecto al nivel de experiencia
		while(totalExperiencia >= 100){
			totalExperiencia -= 100;
			contNivel++;
		}
		if(endReached){
			try {
				if(numFase != 4){
					try {
						panelInicial.gestor.desbloqueaFaseNivelDefault(numFase+1, idPartida);
					} catch (LevelException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		numeroNivel -= contNivel;
		if(numeroNivel >= 0){
			lNumeroNivelesSubidos.setText(String.valueOf(numeroNivel));
		}else{
			lNumeroNivelesSubidos.setText(String.valueOf(0));
		}
		//Guardar en la BD la experiencia y el nivel obtenidos (totalExperiencia y numeroNivel

		switch(rango){
		case 'S': puntosSP = 5; break;
		case 'A': puntosSP = 4; break;
		case 'B': puntosSP = 3; break;
		case 'C': puntosSP = 2; break;
		case 'D': puntosSP = 1; break;
		}

		JLabel lFondo = new JLabel();
		URL imgURL = getClass().getClassLoader().getResource("resources/fondo.jpg");
		ImageIcon fondo = new ImageIcon(imgURL);
		lFondo.setIcon(fondo);
		add(lFondo);
		lFondo.setBounds(0, 0, 800, 600);
	}

	/**Visualiza el panel se subida de nivel
	 * @param evt
	 */
	private void subirNivel(MouseEvent evt){
		panelSubirNivel = new PanelSubirNivel(panelInicial, this, puntosSP, idPartida); 
		panelInicial.ventanaJuego.getContentPane().add(panelSubirNivel, 0);
		this.setVisible(false);
		panelSubirNivel.setVisible(true);
	}

}
